package com.pactera.madp.cp.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pactera.madp.cp.api.dto.contactLoss.ContactLossDetailsTendencyDTO;
import com.pactera.madp.cp.api.dto.contactLoss.ContactNoCommunicationTendencyDTO;
import com.pactera.madp.cp.api.dto.contactLoss.LossDto;
import com.pactera.madp.cp.api.dto.msg.MsgVo;
import com.pactera.madp.cp.api.entity.clientLossManagement.ContactLossEntity;
import com.pactera.madp.cp.api.entity.clientLossManagement.RemindCommunicationEntity;
import com.pactera.madp.cp.api.vo.contactloss.*;

import java.time.LocalDate;
import java.util.List;
import java.util.Set;

/**
 * @date: 2021/7/28 11:15
 * @description:
 */
public interface IContactLossService extends IService<ContactLossEntity> {

    Page queryByDto(Page page, Integer employeeId);

    List<MsgVo> lossDetail(Page page, LossDto dto);

    Integer getStatistic(LocalDate localDate, Integer corpId);

    /**
     * 获取该部门下的所有下一级部门列表/成员列表
     * @param deptId
     * @return 若该部门等级为总行或分行则返回部门列表,若该部门等级为支行则返回成员列表
     */
    ObjListVO getObjListByDeptId(Integer deptId);

    /**
     * 获取流失客户统计信息
     * @param deptId
     * @param wxDeptId
     * @return 返回客户流失统计(按照部门统计)信息
     */
    ContactLossPageVo getLossStatisticsDatas(Integer deptId, Integer wxDeptId);

    ContactLossPageVo getLossStatisticsData(Set<Integer> employeeIds);

    /**
     * 获取流失客户统计信息
     * @param mobile
     * @return 返回客户流失统计(按照员工统计)信息
     */
    ContactLossPageVo getLossStatisticsDatas(String mobile);

    /**
     * 流失客户总数趋势
     * @param dto
     * @return 返回时间范围内的流失客户总数列表
     */
    List<ContactLossStaticsTendencyVO> getContactLossTotalCount(ContactLossDetailsTendencyDTO dto);

    /**
     * 流失微信客户数趋势
     * @param dto
     * @return 返回时间范围内的流失微信客户数列表
     */
    List<ContactLossStaticsTendencyVO> getWxLossCount(ContactLossDetailsTendencyDTO dto);

    /**
     * 流失企业微信客户数趋势
     * @param dto
     * @return 返回时间范围内的流失企业微信客户数列表
     */
    List<ContactLossStaticsTendencyVO> getQywxLossCount(ContactLossDetailsTendencyDTO dto);

    /**
     * 获取未交流客户统计信息
     * @param deptId
     * @param wxDeptId
     * @param communicationEntity
     * @return 返回客户流失统计(按照部门统计)信息
     */
    ContactNoCommunicationPageVo getNoCommunicationStatisticsDatas(Integer deptId, Integer wxDeptId,RemindCommunicationEntity communicationEntity);

    ContactNoCommunicationPageVo getNoCommunicationStatisticsData(Set<Integer> employeeIds,RemindCommunicationEntity communicationEntity);

    /**
     * 获取未交流客户统计信息
     * @param mobile
     * @param communicationEntity
     * @return 返回客户流失统计(按照员工统计)信息
     */
    ContactNoCommunicationPageVo getNoCommunicationStatisticsDatas(String mobile,RemindCommunicationEntity communicationEntity);

    /**
     * 未交流客户总数趋势
     * @param dto
     * @return 返回时间范围内的未交流客户总数列表
     */
    List<ContactNoCommunicationStaticsTendencyVO> getContactNoCommunicationTotalCount(ContactNoCommunicationTendencyDTO dto,RemindCommunicationEntity communicationEntity);

    /**
     * 未交流微信客户数趋势
     * @param dto
     * @return 返回时间范围内的未交流微信客户数列表
     */
    List<ContactNoCommunicationStaticsTendencyVO> getWxNoCommunicationCount(ContactNoCommunicationTendencyDTO dto,RemindCommunicationEntity communicationEntity);

    /**
     * 未交流企业微信客户数趋势
     * @param dto
     * @return 返回时间范围内的未交流企业微信客户数列表
     */
    List<ContactNoCommunicationStaticsTendencyVO> getQywxNoCommunicationCount(ContactNoCommunicationTendencyDTO dto,RemindCommunicationEntity communicationEntity);

}
